package com.sondon.dev_soceket.business;

import io.netty.channel.ChannelHandlerContext;

import java.util.List;

import javax.annotation.Resource;

import com.sondon.dev_info.controller.Dev_InfoController;
import com.sondon.dev_info.entity.DevInfo;
import com.sondon.dev_info.service.TemplateManager;
import com.sondon.dev_soceket.config.CMD;
import com.sondon.dev_soceket.config.MYID;
import com.sondon.dev_soceket.model.TCPEntity;
import com.sondon.dev_soceket.netty.DeviceTCPServer;
import com.sondon.dev_soceket.tcp.util.CodeUtil;

/**
 * @Project : Java_C_Socket2
 * @Package : com.sondon.business
 * @Class : RegisterBusiness.java
 * @Company 广州讯动网络科技有限公司
 * @Author : 蔡文锋
 * @DateTime：2015年4月13日 下午2:46:32
 * @Blog：http://blog.csdn.net/caiwenfeng_for_23
 * @Description : {
 * 
 * 	设备注册业务逻辑
 * 
 *     0X0A05 设备注册：

		00 00 //FILTER_ID_CNT
		04 00 //ID_CNT
		07 60 //ID_0
		00 //ID_0_DATA_INFO
		03 61 //ID_1
		30 30 30 30 30 30 30 30 30 30 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //ID_1_DATA_INFO
		0C 60 //ID_2
		00 //ID_2_DATA_INFO
		00 61 //ID_3
		C9 E8 B1 B8 C3 FB B3 C6 3A 53 45 44 36 34 35 30 4D 20 20 B0 E6 B1 BE 3A 56 31 2E 30 30 2E 30 30 //ID_3_DATA_INFO

 *    }
 */
public class Register {
	
	/**
	 * 
	 * @Author 蔡文锋
	 * @Data_Time  2015年4月20日 下午2:37:28
	 * @Description { }
	 * @param DATA
	 * @return
	 */
	public static TCPEntity DeCode(String DATA,ChannelHandlerContext ctx) {
		TCPEntity response=new TCPEntity();
		// 服务器注册是否成功
		boolean register_seccess=false;
		//获取IP地址
		String remote_ip=ctx.channel().remoteAddress().toString();
//		String local_ip=ctx.channel().localAddress().toString();
//		System.out.println("local_ip  :"+local_ip);
//		System.out.println("IP   :"+remote_ip);
		remote_ip=remote_ip.replace("/", "");
		String[] ip_port=remote_ip.split(":");

		
		// 砍掉过滤ID包 
//		DATA = DATA.substring(4, DATA.length());
		//砍掉ID个数ID_CNT
		DATA=DATA.substring(4,DATA.length());
		//创建数组,保存指令ID
		List<MYID> ids = CodeUtil.GetIDList(DATA);
		/*
		 *  执行指令ID
		 */
//		for (int i = 0; i < ids.size(); i++) {
//			System.out.println(ids.get(i).ID + "      :  " + ids.get(i).ID_INFO);
//		}
//		
		if("00".equals(ids.get(0).ID_INFO)){//注册请求
			DevInfo devinfo=Dev_InfoController.have_devinfo(ids.get(1).ID_INFO);
			if(devinfo == null){
				devinfo=new DevInfo();
			}
			devinfo.setDev_IP(ip_port[0]);
			devinfo.setDev_Port(ip_port[1]);
			//devinfo.setDev_MAC("123-321-111-235");
			devinfo.setDev_SN(ids.get(1).ID_INFO);//SN
			devinfo.setDev_Version(ids.get(3).ID_INFO); //Version
			//保存信息
			Dev_InfoController.SaveOrUpdate(devinfo);
			DeviceTCPServer.channel_map.put(devinfo.getDev_SN(), ctx.channel().id());
			System.out.println("mao size :"+DeviceTCPServer.channel_map.size());
		}else if("03".equals(ids.get(0).ID_INFO)){// 设备收到服务器回复成功
			System.out.println("设备收到服务器回复成功");
		}
		
		
		//返回响应报文
		//CMD
		response.setCMD(CodeUtil.IntToHexString(CMD.Res_Register));
		//LEN     DATA长度
		response.setLEN(CodeUtil.IntToHexString(14)+"00");
		//Data   年月日 时分
		response.setDATA(CodeUtil.getRegisterDate(register_seccess));
		// CRC16校验
		response.setCRC16(CodeUtil.getCRC16(response));
//		System.out.println("response   :"+response.toString());
		return response;
	}
	
}
